class A():
  class A:
    def __bytes__(self):
      print('__bytes__')
      return bytes([0, 1])
  
  print(bytes(A()))

class B():
  class A():
      def __del__(self):
          '''
              这个方法和 del 关键字是不一样的，当然，def 关键字方法也是不能够触发 __del__ 这个魔术方法的。  内存被释放的时候，就会调用该方法。
          '''
          print('__del__')
    

  a = A()
  del a # 这里并没有调用 __del__ 方法
  print('w')
class C():
  class A():
      def __format__(self, spec):
          if spec == 'x':
              return '0xA'
          return '<A>'

  a = A()

  print(f'{a}')
  print(f'{a:x}')

class D():
  class A():
      # 参数首先是 传入 new函数中，然后是传入 init中. 而从本质上讲，这里的 __new__ 方法是对 基类上面的类方法 的重写
      def __new__(cls, x, y):
          print(cls)
          print('__new__')
          print(x, y)
          return super().__new__(cls) # new 方法是 类方法

      # init 是没有返回值的
      def __init__(self, x=0, y=0):
          self.x = x
          print('__init__')

  A(1,22) # 可见这里的参数是传给了 __new__ 这个方法

class E():
  class A():
      def __repr__(self):
          # print('__repr')
          return '__repr__'
    
      def __str__(self):
          # print('__str__')
          return '__str__'

  a = A()

  print(repr(a))
  print(str(a))

